package Day17.intereface_.Seven;

/**
 * @author HYHwtx
 * @version 1.0
 * @date 2022/2/24 18:12
 */

/**
1.多态参数：在前面的usb接口案例，UsbInterface usb，既可以接收手机对象，又可以接收相机对象，接体现了一个接口的多态(接口的引用可以指向实现
接口的类的对象)
2.多态数组：演示一个案例，给Usb数组，存放Phone和相机对象，Phone还有一个特有的方法call()；遍历Usb的数组，如果是Phone对象，除了调用Usb接口
定义的方法外，还要调用他的特有方法call();

 */
public class InterfacePolyArr {
    public static void main(String[] args) {
        //多态数组->接口类型数组
        Usb[] usbs = new Usb[2];
        usbs[0] = new Phone();
        usbs[1] = new Camera();


                /**
给Usb数组，存放Phone和相机对象，Phone还有一个特有的方法call()；遍历Usb的数组，
如果是Phone对象，除了调用Usb接口
定义的方法外，还要调用他的特有方法call();
 */
        for (int i = 0; i < usbs.length; i++) {
            usbs[i].work();//动态绑定
            //和前面一样，我们仍然需要进行类型的向下转换
            if (usbs[i] instanceof Phone) {//判断他的运行类型是不是Phone
                ((Phone) usbs[i]).call();
            }
        }
    }
}
interface Usb{
    void work();

}
class Phone implements Usb{
    public void call(){
        System.out.println("手机可以打电话！");
    }

    @Override
    public void work() {
        System.out.println("手机工作中！");

    }
}
class Camera implements Usb{

    @Override
    public void work() {
        System.out.println("相机工作中！");
    }
}